package com.gmail.blackdog1987.carcare.util;

import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

/**
 * 首选项工具。
 * 
 * @author 傅强
 * @date 2014年1月21日
 */
public class SharedPreferencesUtils {

	private static Context sContext; // 上下文。
	private static SharedPreferences sSharedPreferences; // 首选项实例
	private static Editor sEditor; // 首选项编辑器实例

	/**
	 * 初始化。
	 * 
	 * @param context 上下文。
	 * @param name 首选项文件名。
	 */
	public static void init(Context context, String name) {
		sContext = context;
		sSharedPreferences = sContext.getSharedPreferences(name, Context.MODE_PRIVATE);
		sEditor = sSharedPreferences.edit();
	}

	/**
	 * 初始化检查。
	 */
	private static void checkInit() {
		if (sContext == null) {
			throw new IllegalAccessError("SharedPreferencesUtils not initialized.");
		}
	}
	
	/**
	 * 获取全部数据。
	 * 
	 * @return 全部数据。
	 */
	public static Map<String, ?> getAll() {
		checkInit();
		return sSharedPreferences.getAll();
	}

	/**
	 * 获取布尔型数据。
	 * 
	 * @param key 键。
	 * @param defValue 默认值。
	 * @return 布尔型数据。
	 */
	public static boolean getBoolean(String key, boolean defValue) {
		checkInit();
		return sSharedPreferences.getBoolean(key, defValue);
	}

	/**
	 * 获取浮点型数据。
	 * 
	 * @param key 键。
	 * @param defValue 默认值。
	 * @return 浮点型数据。
	 */
	public static float getFloat(String key, float defValue) {
		checkInit();
		return sSharedPreferences.getFloat(key, defValue);
	}

	/**
	 * 获取整型数据。

	 * @param key 键。
	 * @param defValue 默认值。
	 * @return 整型数据。
	 */
	public static int getInt(String key, int defValue) {
		checkInit();
		return sSharedPreferences.getInt(key, defValue);
	}

	/**
	 * 获取长整型数据。
	 * 
	 * @param key 键。
	 * @param defValue 默认值。
	 * @return 长整型数据。
	 */
	public static long getLong(String key, long defValue) {
		checkInit();
		return sSharedPreferences.getLong(key, defValue);
	}

	/**
	 * 获取字符型数据。
	 * 
	 * @param key 键。
	 * @param defValue 默认值。
	 * @return 字符型数据。
	 */
	public static String getString(String key, String defValue) {
		checkInit();
		return sSharedPreferences.getString(key, defValue);
	}

	/**
	 * 设置布尔型数据。
	 * 
	 * @param key 键。
	 * @param value 值。
	 */
	public static void setBoolean(String key, boolean value) {
		checkInit();
		sEditor.putBoolean(key, value);
		sEditor.commit();
	}

	/**
	 * 设置布尔型数据。
	 * 
	 * @param key 键。
	 * @param value 值。
	 */
	public static void setFloat(String key, float value) {
		checkInit();
		sEditor.putFloat(key, value);
		sEditor.commit();
	}

	/**
	 * 设置整型数据。
	 * 
	 * @param key 键。
	 * @param value 值。
	 */
	public static void setInt(String key, int value) {
		checkInit();
		sEditor.putInt(key, value);
		sEditor.commit();
	}

	/**
	 * 设置长整型数据。

	 * @param key 键。
	 * @param value 值。
	 */
	public static void setLong(String key, long value) {
		checkInit();
		sEditor.putLong(key, value);
		sEditor.commit();
	}

	/**
	 * 设置字符型数据。

	 * @param key 键。
	 * @param value 值。
	 */
	public static void setString(String key, String value) {
		checkInit();
		sEditor.putString(key, value);
		sEditor.commit();
	}

}
